package com.jeesite.modules.sd.common.util;

import org.springframework.util.AlternativeJdkIdGenerator;
import org.springframework.util.IdGenerator;

import java.security.SecureRandom;
import java.util.UUID;


/**
 * UUID 工具
 * <br/>
 * 使用 {@link AlternativeJdkIdGenerator} 代替 jdk 的 {@link UUID}
 * <br/>
 * 它使用了 {@link SecureRandom} 作为种子，来替换调用 {@link UUID#randomUUID()}。它提供了一个更好、更高性能的表现。
 *
 * @author zhanchj
 * @date 2020年8月11日16:26:19
 */
public final class UUIDUtils {

    private UUIDUtils() {
    }


    /**
     * 获取无符号 UUID（16位）
     *
     * @return the string
     * @author zhanchj
     * @date 2020年8月11日16:26:25
     */
    public static String getUUID16Bit() {
        String uuid = Holder.ID_GENERATOR.generateId().toString();
        char[] cs = new char[32];
        char c = 0;
        for (int i = uuid.length() / 2, j = 1; i-- > 0; ) {
            if ((c = uuid.charAt(i)) != '-') {
                cs[j++] = c;
            }
        }
        String uid = String.valueOf(cs);
        return uid;

    }

    /**
     * 获取无符号 UUID（32位）
     *
     * @return the string
     * @author zhanchj
     * @date 2020年8月11日16:26:25
     */
    public static String getUUID32Bit() {
        return Holder.ID_GENERATOR.generateId().toString().replace("-", "");
    }


    /**
     * 使用静态内部类实现单例模式获取 <code>IdGenerator</code> 实例，线程安全。
     *
     * @author zhanchj
     * @date 2020年8月11日16:27:18
     */
    private static class Holder {
        static final IdGenerator ID_GENERATOR = new AlternativeJdkIdGenerator();
    }

    public static void main(String[] args) {
        for (int i = 0; i < 1000; i++) {
            System.out.println(getUUID32Bit());
        }

    }
}
